package com.centsuse.my_redis.service.impl;

import com.centsuse.my_redis.es.entity.KnowledgeDocument;
import com.centsuse.my_redis.es.repositories.KnowledgeDocumentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class KnowledgeDocumentServiceImpl {

    @Autowired
    private KnowledgeDocumentRepository repository;

    /**
     * 创建/更新文档
     * @param document 文档实体
     * @return 保存后的文档
     */
    public KnowledgeDocument save(KnowledgeDocument document) {
        return repository.save(document);
    }

    /**
     * 批量创建/更新文档
     * @param documents 文档列表
     * @return 保存后的文档列表
     */
    public Iterable<KnowledgeDocument> saveAll(List<KnowledgeDocument> documents) {
        return repository.saveAll(documents);
    }

    /**
     * 根据ID查询文档
     * @param id 文档ID (对应 @Id 字段)
     * @return 文档对象 (如果存在)
     */
    public Optional<KnowledgeDocument> findById(String id) {
        return repository.findById(id);
    }

    /**
     * 检查文档是否存在
     * @param id 文档ID
     * @return 是否存在
     */
    public boolean existsById(String id) {
        return repository.existsById(id);
    }

    /**
     * 查询所有文档 (谨慎使用，数据量大时分页)
     * @return 所有文档列表
     */
    public Iterable<KnowledgeDocument> findAll() {
        return repository.findAll();
    }

    /**
     * 分页查询所有文档
     * @param pageable 分页信息
     * @return 分页的文档列表
     */
    public Page<KnowledgeDocument> findAll(Pageable pageable) {
        return repository.findAll(pageable);
    }

    /**
     * 根据ID删除文档
     * @param id 文档ID
     */
    public void deleteById(String id) {
        repository.deleteById(id);
    }

    /**
     * 删除文档实体
     * @param document 文档实体
     */
    public void delete(KnowledgeDocument document) {
        repository.delete(document);
    }

    /**
     * 批量删除文档
     * @param documents 文档列表
     */
    public void deleteAll(List<KnowledgeDocument> documents) {
        repository.deleteAll(documents);
    }

    /**
     * 删除所有文档 (谨慎使用)
     */
    public void deleteAll() {
        repository.deleteAll();
    }

    // --- 调用自定义查询方法 ---

    public List<KnowledgeDocument> findByTaskId(String taskId) {
        return repository.findByTaskId(taskId);
    }

    public List<KnowledgeDocument> findByFileId(String fileId) {
        return repository.findByFileId(fileId);
    }

    public KnowledgeDocument findByParaId(String paraId) {
        return repository.findByParaId(paraId);
    }

    public List<KnowledgeDocument> findByKnTitleContaining(String keyword) {
        return repository.findByKnTitleContaining(keyword);
    }

    public List<KnowledgeDocument> findByContentContaining(String keyword) {
        return repository.findByContentContaining(keyword);
    }

    public List<KnowledgeDocument> findByVectorizedFlag(String flag) {
        return repository.findByVectorizedFlag(flag);
    }

    public List<KnowledgeDocument> findByDelFlag(String flag) {
        return repository.findByDelFlag(flag);
    }

    // 可以在此添加更复杂的业务逻辑，例如组合查询、更新特定字段等
}
